<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        /* 
            函数可以作为另外函数的参数 
            函数可以被另外的函数调用 
            函数可以作为另外函数的返回值 

            什么是回调函数?

            函数a 作为参数传递给 函数b 
            在函数b中以形参的方式调用函数a 


            函数a 就是函数b的回调函数 

            // 封装运动函数 传递 一个函数参数 
            // 当所有的运动效果全部结束 传递的这个函数被执行  
            //  传递的函数就是运动函数的回调函数  
        
        
        
        */

        // function  fn1(){
        //     console.log('我是fn1');
        // }

        // function fn2(fn){
        //     console.log('我是fn2函数');
        //     fn();
        // }


        // fn2(fn1);

        // fn1就是fn2的回调函数 


        // function longfei(fn = function(){}){
        //     const time = Math.random()*3000+2000;
        //     setTimeout(()=>{
        //         console.log('龙飞买完饭,准备回去');
        //         console.log(`耗时${time}`);
        //         console.log('准备给同学买东西')
        //         fn()

        //     },time)
        // }

        // longfei(function(){console.log('给鑫蕊和雪儿买饮料');})


        // const time = Math.random()*3000+2000;
        // setTimeout(()=>{
        //     if(time<3500){
        //         console.log('顺利买完');
        //     }
        //     else{
        //         console.log('退钱');
        //     }
        // },time)


        function longfei(chenggong,shibai){
            const time = Math.random()*3000+2000;
            setTimeout(()=>{
                if(time<3500){
                    console.log('开始给同学买东西');
                    chenggong()
                }
                else{
                    console.log('退钱给同学');
                    shibai()
                }

            },time)
        }


        longfei(function(){
            console.log('给鑫蕊和雪儿买饮料');
        },function(){
            console.log('给鑫蕊和雪儿退钱');
        })
    </script>
</body>
</html>